/**
 * 路由模块
 * Created by wusy on 2019/6/1.
 */
define(function(require, exports, module) {
    var layer = require('layer');
    var resize = require("js/resize");
    var template = require("template");
    //当前处理器
    var handle;
    // 执行JS模块
    var handleModule = function () {
    	//离开页面时候操作方法
    	if(handle){
    		if (handle.transferRenderHtml) {
                handle.transferRenderHtml();
            }
    	}
    	//跳转页面的时候要关闭所有弹出层
    	layer.closeAll();
        var url = window.location.hash.slice(1);
        //去掉传参
        url = url.split("?")[0];
        var trigger = triggers[url];
        // 获取模块的HTML
        require([trigger.content],function(content){
            var htmlRender = template.compile(content);
            $(".content-container-wrapper .page-content-wrapper").html(htmlRender(trigger.data ? trigger.data : {}));
            // 渲染完HTML后的操作
            require([trigger.handle],function(t){
                handle = t ;
                if (handle.afterRenderHtml) {
                    handle.afterRenderHtml(trigger.data);
                }
            });
            //界面视图左侧菜单和位置信息更新
            updateMenuTreeAndLocationView(trigger);
            //计算工作区域高度
            resize.router();
        });

    };


    /**
     * 界面视图左侧菜单和位置信息更新
     */
    var updateMenuTreeAndLocationView = function (trigger) {
    	// 模块选项或标签的选中效果
    	var url = window.location.hash;
    	//去掉传参
        url = url.split("?")[0];
    	var menu = $(".sidebar-menu").find("[href='" + url + "']");
    	if(menu.length > 0 ){
    		$(".sidebar-menu .active").removeClass('active');
    		menu.parent().addClass('active').siblings().removeClass('active');
        	var treeview = menu.parent().parent(".treeview-menu");
        	if(treeview.length > 0 ){
        		treeview.show();
        		treeview.parent(".treeview").addClass("menu-open");
        	}
    	}
        //更新位置信息
        if($("#page-content-location-content").length > 0){
            var location = "";
            for(var i = 0 ; i< trigger.location.length ; i++){
                location += location == "" ? trigger.location[i] : " &gt; " + trigger.location[i];
            }
            $("#page-content-location-content").html(location);
        }
    };

    /**
     * 所有模块通用方法
     */
    var onTrigger = function(){
        handleModule();
    };

    exports.onTrigger = function() {
        onTrigger();
    };

    /**
     * 路由模块暴露方法，提供跳转至内部页面URL功能
     * @param url
     */
    var transfer = function(url){
        window.location.href = "#" + url;
    };

    exports.transfer =  function(url) {
        transfer(url);
    };

    /**
     * 注册模块完毕后调用的方法
     */
    exports.handleAfterRegister = function () {
        if (window.location.hash) {
            var url = window.location.hash.substring(1).split("?")[0];
            var menu = $(".sidebar-menu").find("[href='#" + url + "']");
            if(menu.length > 0 ) {
                // 如果加载的模块是当前页，要代码触发跳转事件
                // 通用触发
                onTrigger();
                return;
            }
        }
      //  transfer("/config-manager/project-config");
    };

    router.configure({
        on: onTrigger
    });

    /**
     * url 模块路由名称
     * 是否是菜单 模块路由地址
     */
    exports.registerAsync = function (url , location , data) {
        var trigger = {
            content : "text!page"+url+"/main.html",
            handle : "page"+url + "/js/main",
            data : data ,
            location : location
        };
        triggers[url] = trigger;
        router.on(url, function () {

        });
    };

    /**
     * 初始化路由
     */
    exports.init = function () {
        router.init();
    };

    /**
     * 页面视图更新
     */
    exports.module = function( name , module , data){
        var url = window.location.hash.substring(1).split("?")[0];
        var location = new Array();
        for(var i = 0 ; i < triggers[url].location.length ; i++){
            location.push(triggers[url].location[i]);
        }
        location.push("<a href='#/"+module+"'>"+name+"</a>")
        var trigger = {
            content : "text!"+module+"/main.html",
            handle : module + "/js/main",
            data : data,
            location : location
        };
        module = "/" + module;
        triggers[module] = trigger;
        router.on(module, function () {

        });
        transfer(module);
    }
});
